package com.masterlu.leetcode.daily.stack.simple;

import java.util.Stack;

/**
 * 用栈实现队列
 * https://leetcode-cn.com/problems/implement-queue-using-stacks/
 *
 * @Author：masterlu
 * @Date：2021/4/25 10:17 上午
 */
public class S232MyQueue {

    /**
     * inputStack作为输入栈，用于压入传入数据，
     * outputStack作为输出栈，用于pop和peek操作。
     * 当s2为空时，将s1数据转移到s1中。
     * <p>
     * 实现队列的【先进先出】特性。
     */
    private Stack<Integer> inputStack;
    private Stack<Integer> outputStack;

    public S232MyQueue() {
        inputStack = new Stack<>();
        outputStack = new Stack<>();
    }

    public void push(int x) {
        inputStack.push(x);
    }

    public int pop() {

        if (outputStack.isEmpty()) {
            while (!inputStack.isEmpty()) {
                outputStack.push(inputStack.pop());
            }
        }
        return outputStack.pop();
    }

    public int peek() {
        if (outputStack.isEmpty()) {
            while (!inputStack.isEmpty()) {
                outputStack.push(inputStack.pop());
            }
        }
        return outputStack.peek();
    }

    public boolean empty() {
        return inputStack.isEmpty() && outputStack.isEmpty();
    }
}
